package com.zc.enums;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Getter;
import lombok.ToString;

@Getter
public enum StatusEnum {
    EXCELLENT(1, "优秀"),
    GOOD(0, "良好"),
    GENERAL(-1, "一般");

    private final Integer code;

    // 序列化
    @JsonValue
    private final String message;

    StatusEnum(Integer code, String message) {
        this.code = code;
        this.message = message;
    }


    /**
     * 根据状态码获取对应的枚举对象
     *
     * @param code 状态码，用于查找对应的枚举对象
     * @return 如果找到对应的状态码，则返回相应的枚举对象；否则返回null
     */
    public static StatusEnum getByCode(Integer code) {
        // 遍历StatusEnum的所有枚举值
        for (StatusEnum statusEnum : StatusEnum.values()) {
            // 检查当前枚举值的状态码是否与传入的状态码相等
            if (statusEnum.getCode().equals(code)) {
                // 如果相等，则返回当前的枚举对象
                return statusEnum;
            }
        }
        // 如果遍历完所有枚举值都没有找到对应的状态码，则返回null
        return null;
    }

    // 反序列化
    @JsonCreator
    public static StatusEnum getByMessage(String message) {
        // 遍历StatusEnum的所有枚举值
        for (StatusEnum statusEnum : StatusEnum.values()) {
            // 检查当前枚举值的状态码是否与传入的状态码相等
            if (statusEnum.getMessage().equals(message)) {
                // 如果相等，则返回当前的枚举对象
                return statusEnum;
            }
        }
        // 如果遍历完所有枚举值都没有找到对应的状态码，则返回null
        return null;
    }

    @Override
    public String toString() {
        return message;
    }
}
